const debounce = (fn, delay) => {
    let timer = null;
    return function () {
        let context = this;
        let args    = arguments;
        clearTimeout(timer);
        timer = setTimeout(function () {
            fn.apply(context, args);
        }, delay);
    };
};

//封装节流
//新建文件后将以下代码放入
const throttle        = (fn, delay) => {
    let valid = true;
    return function () {
        let context = this;
        let args    = arguments;
        if (!valid) {
            return false;
        }
        valid = false;
        setTimeout(() => {
            fn.apply(context, args);
            valid = true;
        }, delay);
    };
};
const deepCloneSimple = (obj) => {
    //_tmp和result是相互独立的，没有任何联系，有各自的存储空间。
    // let _tmp   = JSON.stringify(obj);//将对象转换为json字符串形式
    // let result = JSON.parse(_tmp);//将转换而来的字符串转换为原生js对象
    // return Jresult;//将转换而来的字符串转换为原生js对象;
    return JSON.parse(JSON.stringify(obj));//将转换而来的字符串转换为原生js对象;
}
const deepCloneComplex = (obj) => {
    let objClone = Array.isArray(obj) ? [] : {};
    if (obj && typeof obj === "object") {
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                //判断ojb子元素是否为对象，如果是，递归复制
                if (obj[key] && typeof obj[key] === "object") {
                    objClone[key] = deepCloneComplex(obj[key]);
                } else {
                    //如果不是，简单复制
                    objClone[key] = obj[key];
                }
            }
        }
    }
    return objClone;
}
module.exports = {
    debounce,
    throttle,
    deepCloneSimple,
    deepCloneComplex,
}
